//装饰器⼯⼚
//装饰器⼯⼚是⼀个返回装饰器函数的函数，可以为装饰器添加参数，可以更灵活地控制装饰器的⾏为。
//需求：定义⼀个 LogInfo 类装饰器⼯⼚，实现 Person 实例可以调⽤到 introduce ⽅法，
//      且 introduce 中输出内容的次数，由 LogInfo 接收的参数决定。
type Constructor4 = new (...args: any[]) => {}

//装饰器⼯⼚
function LogInfo2(n: number) {
    return function (target: Constructor4) {
        target.prototype.introduce = function () {
            for (let i = 0; i < n; i++) {
                console.log(`我的名字：${this.name}，我的年龄：${this.age}`)
            }
        }
    }
}
interface Person17 {
    introduce(): void
}

@LogInfo2(5)
class Person17 {
    constructor(public name: string, public age: number) { }

    speack() {
        console.log('你好呀！')
    }
}

const p17 = new Person17('张三', 18)
//@ts-ignore
p17.introduce()

